print("=== Number Type ===\n")
integer = 1+1               # 整数,python3只有一种整数int,没有python2中的long
print("int", isinstance(integer,int) , integer)
boolean = True              # bool 在 Python2 中是没有布尔型的，它用数字 0 表示 False，用 1 表示 True。到 Python3 中，把 True 和 False 定义成关键字了，但它们的值还是 1 和 0，它们可以和数字相加。
print("boolean", isinstance(boolean, bool) , boolean+0.1)
floatNumber = 1+0.2         # 浮点数
print("float", isinstance(floatNumber,float) , floatNumber)
complexNumber = 2j          # 复数
print("complex", isinstance(complexNumber,complex) , complexNumber)
# type()不会认为子类是一种父类类型。
# isinstance()会认为子类是一种父类类型。
print("加法", 5 + 4)  # 加法
print("减法", 4.3 - 2) # 减法
print("乘法", 3 * 7)  # 乘法
print("除法,得到float", 1 / 3)  # 除法，得到一个浮点数
print("除法,得到int", 1 // 3) # 除法，得到一个整数
print("取余", 10 % 3) # 取余
print("乘方" , 2 ** 3) # 乘方


print("\n=== String ===\n")
# python中单引号和双引号使用完全相同,使用三引号('''或""")可以指定一个多行字符串
str = 'this is a string'
sentence = "this is a sentence"
paragraph = '''This is a paragraph
, a multi line paragraph'''
print(str)                 # 输出字符串
print(str[0:-1])           # 输出第一个到倒数第二个的所有字符
print(str[0])              # 输出字符串第一个字符
print(str[2:5])            # 输出从第三个开始到第五个的字符
print(str[2:])             # 输出从第三个开始的后的所有字符
print(str * 2)             # 输出字符串两次
print(str + '你好')        # 连接字符串
print('hello\trunoob')      # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob')     # 在字符串前面添加一个 r，表示原始字符串，不会发生转义


print("\n=== List列表 ===\n")
# 索引值以 0 为开始值，-1 为从末尾的开始位置
# 与Python字符串不一样的是，列表list中的元素是可以改变的
List = ['abcd', 786 , 2.23, 'runoob', 70.2]
tinyList = [123, 'runoob']
print("list", List)            # 输出完整列表
print("list[0]", List[0])         # 输出列表第一个元素
print("list[1:3]", List[1:3])       # 从第二个开始输出到第三个元素
print("list[2:]", List[2:])        # 输出从第三个元素开始的所有元素
print("tinylist*2", tinyList * 2)    # 输出两次列表
print("list+tinylist", List + tinyList) # 连接列表
List[0] = "not abcd"
print(List)  # 修改list中元素的值
if 'abcd' in List:
    print('abcd in list')
else:
    print('abcd not in list')


print("\n=== Tuple元组 ===\n")
tup = ('abcd', 786 , 2.23, 'runoob', 70.2)
tinyTuple = (123, 'runoob')
print (tup)                 # 输出完整元组
print (tup[0])              # 输出元组的第一个元素
print (tup[1:3])            # 输出从第二个元素开始到第三个元素
print (tup[2:])             # 输出从第三个元素开始的所有元素
print (tinyTuple * 2)       # 输出两次元组
print (tup + tinyTuple)     # 连接元组
# tuple[0] = "not abcd";    # tuple中的值不允许被修改
# 但是tuple可以包含可变的对象,比如list列表


print("\n=== Set ===\n")
# 集合（set）是一个无序不重复元素的序列。可以使用大括号 { } 或者 set() 函数创建集合，注意：创建一个空集合必须用 set() 而不是 { }，因为 { } 是用来创建一个空字典。
classA = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose', 'gaowen'} # A班
listB = ['gaowen' , 'zhenli' , 'gaowen' , 'zhenli']
classB = set(listB) # B班
print(classA , classB)
if "gaowen" in classA:
    print("gaowen in classA")
if "gaowen" in classB:
    print("gaowen in classB")
else : print("gaowen not in this school")
print("差集", classA - classB)     # a和b的差集
print("并集", classA | classB)     # a和b的并集
print("交集", classA & classB)     # a和b的交集
print("不同时存在的元素",classA ^ classB)     # a和b中不同时存在的元素

print("\n=== Dictionary字典(Map) ===\n")
# 字典是一种映射类型，字典用"{ }"标识，它是一个无序的键(key) : 值(value)对集合。
dict = {}
dict = {"SSO" : "gaowen"}
print(dict)
dict["AMP"] = ["zhenli", "gaowen"]
print(dict["AMP"])
# print(dict["DS"])      # 不存在的key会报错
print(dict)
print(dict.keys())
print(dict.values())

print("\n=== Python类型转换 ===\n")
print("http://www.runoob.com/python3/python3-data-type.html")